/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: wx
 * Date: 2024-03-13
 * Time: 20:53
 */
public class Demo1 {
}

/**
 * 网络编程  -- 通过代码完成基于网络的跨主机通信
 *                              TCP/IP网络
 *                              蓝牙通信
 *                              近场通信 (nfc)
 *                              毫米波通信
 *                              .......
 *     TCP/IP网络 日常编程中最常涉及到的,最通用的跨主机通信方式
 *     蓝牙通信 功耗滴,待机时间长,效率也低
 *     近场通信 (nfc) 贴的很近才可以
 *     毫米波通信 功率比较高,带宽也比较高
 *              抗干扰能力差
 *
 *  网络编程 本质上就是学习 传输层 给 应用层 提供的api, 就可以写代码,把数据交给传输层,进一步的通过层层封装
 *  就可以把数据通过网卡发送出去了
 *  要学的不仅仅是 api 也是 网络程序 的基本工作流程
 *  ------------------------------------------------------------------------------------------
 *
 *  网络编程中的一些重要概念
 *  客户端 vs 服务器
 *  在网络中主动发起通信的这一方,称为"客户端"
 *  别动接收的这一方,称为服务器
 *  同一个程序在不同的场景中,可能是客户端,也可能是服务器
 *  -------------------------------------------------------------------------------------------
 *  客户端孤噩夫妻发送的数据,称为 "请求"(request)
 *  服务器给客户端返回的数据,称为 "响应"(response)
 *
 *  客户端和服务器之间交互,也是有很多种模式的
 *  1. "一问一答"
 *  一个请求,一个响应,一对一
 *  常见于 web 开发
 *
 *  2. "一问多答"
 *  一个请求对于多个响应
 *  这个场景主要是涉及带 "下载" 的场景中
 *
 *  3. "多问多答"
 *  多个请求,对于多个响应
 *  这个场景主要涉及到 "上传"
 *
 *  4. "多问多答"
 *  一个请求可能对于多个响应
 *  一个响应也可能对于多个请求
 *  这个场景主要涉及到"远程控制/远程桌面"
 *  你进行的鼠标,键盘操作,都会作为一个个请求发送过去
 *  你看到的画面,作为响应
 *
 *  ------------------------------------------------------------------------------------------------------
 *  要想使用网络编程,需要使用系统的 api.本质上是传输层提供的
 *  传输层涉及到的协议主要是两个 TCP ,UDP
 *  由于这两个协议,差异挺大的,他们的 api 也差别挺大的
 *
 *  TCP 和 UDP 特点上有啥差别(暂时直观认识)
 *  TCP:
 *  有连接
 *  可靠传输
 *  面向字节流
 *  全双工
 *
 *  UDP:
 *  无连接
 *  不可靠传输
 *  面向数据报
 *  全双工
 *
 *  "连接"(不是物理意义的,是一种抽象的概念, 虚拟的连接)
 *  本质上是通信双方各自保存对方的相关信息
 *  譬如说:
 *  结婚.首先需要有结婚证
 *  领到结婚证之后,就相当于两人确立了夫妻关系,也就相当于 "建立连接"
 *  不是 "物理意义" 的连接
 *  虚拟意义的连接,抽象的连接
 *  计算机中的"网络连接"
 *  就是通信双方,各自保存对方的信息
 *
 *  客户端,就有一些数据结构,来记录了谁是它的服务器
 *  服务器,就有一些数据结构,记录了,谁是它的客户端
 *  所谓的 连接 ,本质上就是记录双方的信息
 *
 *
 *  简单的例子
 *  打电话 有连接的通信方式
 *  拨号之后,你得接通,才能说话.你可以选择接通,或者不接通
 *  双方认同才能连接
 *
 *  无连接,发短信/发微信,无论你是否同意,我都能发过去
 *
 *
 *  可靠传输和不可靠传输
 *  网络上存在的 "异常情况" 是非常多的
 *  无论使用什么样的软硬件的技术手段,无法 100% 保证网络数据能够从 A 一定传输到 B
 *
 *  此处谈到的"可靠传输",尽可能的完成数据传输
 *  虽然无法确保数据到达对方,至少可以知道,当前这个数据是不是收到了
 *
 *  此处谈到的可靠传输,主要指的是发的数据到没到,发送方能够清楚的感知到
 *  (具体实现,后边再说)
 *
 *  面向字节流和面向数据报
 *
 *  面向字节流:     TCP
 *  字节流和文件中的字节流完全一致
 *  网络中传输数据的基本单位就是字节
 *
 *  面向数据报:     UDP
 *  每次传输的基本单位是一个 数据报(由一系列的字节构成的)特定的结构
 *
 *  全双工 和 半双工
 *  双向通信(全双工)
 *  单向通信(半双工)
 *
 */